using System;
using Rarous.NForms.Validation;

namespace Rarous.NForms {
  /// <summary>
  /// Třída reprezentující textové vstupní pole.
  /// </summary>
  public class TextItem : FormItem {

    /// <summary>
    /// Konstruktor. Vytvoří novou instanci TextItem.
    /// </summary>
    /// <param name="parent">Nadřazený formulář.</param>
    /// <param name="name">Název formulářového políčka.</param>
    /// <param name="label">Textový popis k políčku.</param>
    public TextItem(Form parent, string name, string label)
      : this(parent, name, label, null) {
    }
    /// <summary>
    /// Konstruktor. Vytvoří novou instanci TextItem.
    /// </summary>
    /// <param name="parent">Nadřazený formulář.</param>
    /// <param name="name">Název formulářového políčka.</param>
    /// <param name="label">Textový popis k políčku.</param>
    /// <param name="attributes">Další atributy elementu.</param>
    public TextItem(Form parent, string name, string label, object attributes)
      : this(parent, name, label, attributes, false) {
    }
    /// <summary>
    /// Konstruktor. Vytvoří novou instanci TextItem.
    /// </summary>
    /// <param name="parent">Nadřazený formulář.</param>
    /// <param name="name">Název formulářového políčka.</param>
    /// <param name="label">Textový popis k políčku.</param>
    /// <param name="attributes">Další atributy elementu.</param>
    /// <param name="secure">Má se políčko vyrenderovat jako bezpečné? (např. pro zadání hesla)</param>
    public TextItem(Form parent, string name, string label, object attributes, bool secure) {
      ConstructorContract(parent, name);

      InputType type = secure ? InputType.Password : InputType.Text;
      Control = new HtmlElement(InputTag, new { Name = name, Id = ConvertNameToId(name), Type = type }, HtmlElement.SelfClosing);
      // pro nezadany label vyrenderujeme prazdne nic
      Label = CreateLabel(name, label);

      Register(parent, name);
      SetAttributes(attributes);
    }

    /// <summary>
    /// Nastaví prvek jako povinný.
    /// </summary>
    /// <param name="message">Chybová hláška při nesplnění pravidla.</param>
    /// <returns></returns>
    public TextItem Required(string message) {
      AddRule(new PredicateRule<string>(message, s => String.IsNullOrEmpty(s) == false));
      Control.AddClass("required");
      return this;
    }
    
  }
}